@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo ========================================
echo Win11 工具箱 - 高级打包脚本
echo ========================================
echo.
echo 请选择打包方式：
echo   1. 单文件模式（推荐）- 打包成一个exe文件
echo   2. 目录模式 - 打包成文件夹（启动更快）
echo   3. 单文件模式（带控制台）- 用于调试
echo   4. 清理构建文件并退出
echo.
set /p choice="请输入选项 (1-4): "

if "%choice%"=="4" goto :cleanup
if "%choice%"=="1" goto :build_onefile
if "%choice%"=="2" goto :build_onedir
if "%choice%"=="3" goto :build_console
echo 无效选项！
pause
exit /b 1

:build_onefile
echo.
echo [模式] 单文件打包（无控制台）
set BUILD_MODE=--onefile --windowed
set OUTPUT_NAME=Win11工具箱
goto :start_build

:build_onedir
echo.
echo [模式] 目录打包（无控制台）
set BUILD_MODE=--onedir --windowed
set OUTPUT_NAME=Win11工具箱
goto :start_build

:build_console
echo.
echo [模式] 单文件打包（带控制台）
set BUILD_MODE=--onefile --console
set OUTPUT_NAME=Win11工具箱_Debug
goto :start_build

:start_build
echo ========================================
echo.

REM 激活虚拟环境（如果存在）
if exist ".venv\Scripts\activate.bat" (
    echo [0/6] 激活虚拟环境...
    call .venv\Scripts\activate.bat
    echo ✓ 虚拟环境已激活
    echo.
)

REM 检查Python
echo [1/6] 检查Python环境...
python --version >nul 2>&1
if errorlevel 1 (
    echo [错误] 未检测到Python
    pause
    exit /b 1
)
python --version
echo.

REM 检查PyInstaller
echo [2/6] 检查PyInstaller...
python -m pip show pyinstaller >nul 2>&1
if errorlevel 1 (
    echo 正在安装PyInstaller...
    python -m pip install pyinstaller
    if errorlevel 1 (
        echo [错误] 安装失败
        pause
        exit /b 1
    )
) else (
    echo ✓ PyInstaller已安装
)
echo.

REM 检查依赖
echo [3/6] 检查项目依赖...
if not exist "main.py" (
    echo [错误] 未找到main.py文件
    pause
    exit /b 1
)
echo ✓ main.py 存在
echo.

REM 清理旧文件
echo [4/6] 清理旧的构建文件...
call :cleanup_files
echo.

REM 创建版本信息文件
echo [5/6] 创建版本信息...
echo # -*- coding: utf-8 -*- > version_info.txt
echo VSVersionInfo( >> version_info.txt
echo   ffi=FixedFileInfo( >> version_info.txt
echo     filevers=(1, 0, 0, 0), >> version_info.txt
echo     prodvers=(1, 0, 0, 0), >> version_info.txt
echo     mask=0x3f, >> version_info.txt
echo     flags=0x0, >> version_info.txt
echo     OS=0x40004, >> version_info.txt
echo     fileType=0x1, >> version_info.txt
echo     subtype=0x0, >> version_info.txt
echo     date=(0, 0) >> version_info.txt
echo   ), >> version_info.txt
echo   kids=[ >> version_info.txt
echo     StringFileInfo( >> version_info.txt
echo       [ >> version_info.txt
echo       StringTable( >> version_info.txt
echo         u'080404b0', >> version_info.txt
echo         [StringStruct(u'CompanyName', u'Win11 Toolbox'), >> version_info.txt
echo         StringStruct(u'FileDescription', u'Win11 工具箱'), >> version_info.txt
echo         StringStruct(u'FileVersion', u'1.0.0.0'), >> version_info.txt
echo         StringStruct(u'InternalName', u'Win11Toolbox'), >> version_info.txt
echo         StringStruct(u'LegalCopyright', u'Copyright 2025'), >> version_info.txt
echo         StringStruct(u'OriginalFilename', u'Win11工具箱.exe'), >> version_info.txt
echo         StringStruct(u'ProductName', u'Win11 工具箱'), >> version_info.txt
echo         StringStruct(u'ProductVersion', u'1.0.0.0')]) >> version_info.txt
echo       ]), >> version_info.txt
echo     VarFileInfo([VarStruct(u'Translation', [2052, 1200])]) >> version_info.txt
echo   ] >> version_info.txt
echo ) >> version_info.txt
echo ✓ 版本信息已创建
echo.

REM 开始打包
echo [6/6] 开始打包...
echo 这可能需要几分钟，请耐心等待...
echo.

REM 构建PyInstaller命令
set CMD=python -m PyInstaller --noconfirm %BUILD_MODE%
set CMD=%CMD% --name "%OUTPUT_NAME%"

REM 添加图标（如果存在）
if exist "icon.ico" (
    set CMD=%CMD% --icon=icon.ico
    echo ✓ 使用自定义图标
)

REM 添加数据文件
if exist "README.md" (
    set CMD=%CMD% --add-data "README.md;."
)
if exist "COM_PORT_CLEANER_README.md" (
    set CMD=%CMD% --add-data "COM_PORT_CLEANER_README.md;."
)

REM 请求管理员权限
set CMD=%CMD% --uac-admin

REM 添加主文件
set CMD=%CMD% main.py

REM 执行打包
echo 执行命令：
echo %CMD%
echo.
%CMD%

if errorlevel 1 (
    echo.
    echo [错误] 打包失败！
    echo.
    echo 可能的原因：
    echo   1. 缺少必要的依赖包
    echo   2. main.py 存在语法错误
    echo   3. 磁盘空间不足
    echo.
    pause
    exit /b 1
)

echo.
echo ========================================
echo 打包完成！
echo ========================================
echo.

REM 显示结果
if "%choice%"=="1" (
    if exist "dist\%OUTPUT_NAME%.exe" (
        call :show_result "dist\%OUTPUT_NAME%.exe"
    )
) else if "%choice%"=="2" (
    if exist "dist\%OUTPUT_NAME%" (
        echo 输出目录：%cd%\dist\%OUTPUT_NAME%
        echo.
        echo 目录内容：
        dir /b "dist\%OUTPUT_NAME%"
        echo.
        echo 主程序：%OUTPUT_NAME%.exe
    )
) else if "%choice%"=="3" (
    if exist "dist\%OUTPUT_NAME%.exe" (
        call :show_result "dist\%OUTPUT_NAME%.exe"
    )
)

echo.
echo 提示：
echo   - 首次运行可能需要管理员权限
echo   - 可以将程序复制到任意位置使用
echo   - 如遇到问题，请使用"带控制台"模式查看错误信息
echo.
echo ========================================
pause
exit /b 0

:show_result
echo 输出文件：%cd%\%~1
echo.
for %%A in ("%~1") do (
    set size=%%~zA
    set /a size_mb=!size! / 1048576
    echo 文件大小：!size! 字节 ^(!size_mb! MB^)
)
echo.
goto :eof

:cleanup
echo.
echo 正在清理构建文件...
call :cleanup_files
echo 清理完成！
echo.
pause
exit /b 0

:cleanup_files
if exist "build" (
    echo - 删除 build 目录...
    rmdir /s /q build 2>nul
)
if exist "dist" (
    echo - 删除 dist 目录...
    rmdir /s /q dist 2>nul
)
if exist "*.spec" (
    echo - 删除 spec 文件...
    del /q *.spec 2>nul
)
if exist "__pycache__" (
    echo - 删除 __pycache__ 目录...
    rmdir /s /q __pycache__ 2>nul
)
if exist "version_info.txt" (
    echo - 删除 version_info.txt...
    del /q version_info.txt 2>nul
)
echo ✓ 清理完成
goto :eof
